var Strategy = (function () {
    // 这里是提前封装好的一组一组的策略 这个对象就叫做策略对象
    var _S = {
        username: function (str) {
            var reg = /(0?(13|14|15|17|18|19)[0-9]{9})|(\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,14})/;
            return reg.test(str);
        },
        password: function (str) {
            var reg = /^\w{6,10}$/;
            return reg.test(str);
        },
        nickname: function (str) {
            var reg = /^[\u4e00-\u9fa5a-zA-Z0-9]{1,8}$/;
            return reg.test(str);
        }

    }

    // 返回一个对象 该对象有两个方法
    return {
        // 使用策略的方法
        use: function (type, value) {
            if (_S[type]) {
                return _S[type](value);
            }
            throw new Error(type + "策略不存在")
        },
        // 添加策略的方法
        add: function (type, fun) {
            if (_S[type]) {
                throw new Error(type + "策略已存在 请不要替换")
            }
            _S[type] = fun;
        }
    }
})()